package gat.api.background.backgroundUser;

import java.util.List;

import com.bitsun.core.common.persistence.Pager;
import com.bitsun.core.common.web.ResultDTO;

import gat.dto.req.backgroundUser.RoleReqDto;
import gat.dto.res.backgroundUser.RoleResDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;

/**
 * 角色信息表
 * @Author: tmac
 * @Email: tmac
 */
@Api(value = "role", description = "角色信息表接口", tags = {"角色"})
public interface BRoleApi {

    /**
     * 分页查询角色信息
     *
     * @param reqDto 参数params
     * @return 返回一系列资源对象
     */
    @ApiOperation(value = "列表查询", tags = {
            "角色",}, nickname = "getRoleList")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "操作是否成功,000000:成功，否则失败")})
    ResultDTO<Pager<RoleResDto>> getRoleList(RoleReqDto reqDto);

    /**
     * 查询可用角色列表
     * @return 返回一系列资源对象
     */
    @ApiOperation(value = "查询可用角色列表", tags = {
            "角色",}, nickname = "getRoleList")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "操作是否成功,000000:成功，否则失败")})
    ResultDTO<List<RoleResDto>> getEnableRoleList();

    /**
     * 创建一个资源对象
     * @return 返回新创建的资源对象
     */
    @ApiOperation(value = "创建一个资源对象（返回新创建的资源对象）", tags = {"角色"}, nickname = "addRole")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "000000:成功，否则失败")})
    ResultDTO<RoleResDto> addRole(RoleReqDto reqDto);


    /**
     * 删除单个或一系列资源对象
     *
     * @param ids 用英文逗号隔开
     * @return 返回一个空文档
     */
    @ApiOperation(value = "删除单个或一系列资源对象", tags = {"角色",}, nickname = "deleteRole")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "操作是否成功,000000:成功，否则失败")})
    ResultDTO<Void> deleteRole(String ids);

    /**
     * 更新一个资源对象(部分更新)
     *
     * @return 返回完整的资源对象
     */
    @ApiOperation(value = "更新一个资源对象(部分更新,更新对象里有值的属性,空值不更新)", tags = {"角色"}, nickname = "patchUpdateRole")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "操作是否成功,000000:成功，否则失败")})
    ResultDTO<RoleResDto> patchUpdateRole(Long id, RoleReqDto reqDto);

    /**
     * 查询当前用户的角色信息
     *
     * @return 返回完整的资源对象
     */
    @ApiOperation(value = "查询当前用户的角色信息", tags = {"角色"}, nickname = "patchUpdateRole")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "操作是否成功,000000:成功，否则失败")})
    ResultDTO<List<RoleResDto>> getByUserId(Long userId);

    /**
     * 查询一个资源对象
     *
     * @return 返回单独的资源对象
     */
    @ApiOperation(value = "查询一个资源对象", tags = {"角色"}, nickname = "getOneRole")
    @ApiResponses(value = {@ApiResponse(code = 200, message = "操作是否成功,000000:成功，否则失败")})
    ResultDTO<RoleResDto> getOneRole(Long id);


}
